package 排序;

import java.util.Arrays;

/**
 * 在数组里面选择最小的，放到第一位，然后在剩下的数组里面找到最小的放到第二位，如此反复直到结束
 */
public class 选择排序 {

    public static void selectSort(int[] a) {
        int n = a.length;
        for (int i = 0; i < n-1; i++) {
            for (int j = i + 1; j < n; j++) {
                // 要始终保持最小值为当前的 i
                int minIndex = i;
                boolean exchange = true;
                // 如果 a[j] < a[min] 说明需要把 j 设置为最小的
                if (a[j] < a[minIndex]) {
                    minIndex = j;
                } else {
                    exchange = false;
                }
                // 如果需要交换数据就开始交换
                if (exchange) {
                    int temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] array = {0, 200, -523, 7, 1, -1, -18, 2, 10, -6};
        System.out.println(Arrays.toString(array));
        selectSort2(array);
        System.out.println(Arrays.toString(array));

    }

    public static void selectSort2(int[] array) {
        for (int i = 0; i < array.length; i++) {
            for (int j = i + 1; j < array.length; j++) {
                // 假设 i 所处位置的元素就是最小的
                int min = i;
                if (array[j] < array[min]) {
                    // 后面的更小就要排序到前面
                    array[i] ^= array[j];
                    array[j] ^= array[i];
                    array[i] ^= array[j];
                }
            }
        }
    }
}
